🇬🇧
Diese Seite ist Teil eines Framesets. (Index.htm)

Kalibrierbare Uhr

Quarze fĂĽr Mikrocontroller haben eine Genauigkeit von etwa 10-4, damit eine fĂĽr Quarzuhren inakzeptable Gangabweichung von 10 Sekunden pro Tag.

Wer einen genauen Frequenzzähler zur Verfügung hat, kann die Gangabweichung unter Kontrolle bringen:

Bei letzterer Methode ist gemeinsam mit einer Termperaturmessung und gemessenem Temperaturgang des Quarzes eine programmatische Temperaturkompensation möglich!

Aber wie erreicht man eine Genauigkeit von 10-6 bei lauter 8-bit-Teilern?
Irgendwelche Fummeleien mit umschaltenden Teilern sehen nicht gerade elegant aus...

Die Lösung ist ein genügend breiter Überlauf-Zähler. Wie funktioniert das?

  1. Eine Frequenzteilung bspw. durch 32 wird üblicherweise erreicht, indem man einen Zähler mit 32 initialisiert und so oft abwärts zählen lässt, bis dieser Null erreicht. Dann wird der Zähler wieder mit 32 initialisiert und die entsprechende Routine gerufen. Als Programm:
    	...
    	dec	r18	;r18 sei der ISR-Teiler
    	brne	ende
    	ldi	r18,32
    	call	SekundeVergangen
    ende:	...
    
    Damit wird ein 5-Bit-Zähler simuliert.

  2. Genauso geht es aber auch, auf einen 8-Bit-Zähler stets 8 zu addieren, und bei jedem Ăśberlauf die Routine zu rufen:
    	...
    	ldi	r16,8
    	add	r18,r16	;r18 sei der ISR-Akkumulator
    	brcc	ende
    	call	SekundeVergangen
    ende:	...
    

  3. In Zeit gedacht ist die 8 anzusehen als eine Festkommazahl mit dem Wert 8/256 = 1/32, Sekunde nämlich.

  4. Nun ist es ohne weiteres möglich, den Akkumulator (hier r18) durch beliebig viele Bits zu ersetzen und eine entsprechend genaue Festkommazahl zu addieren.
Anfänger denken zu oft in Frequenzen, man arbeite besser stets mit Zeiten!